home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 3 / Cream of the Crop 3.iso / comm / wnos5src.zip / MISC.C < prev    next >
Text File  |  1993-08-09  |  3KB  |  190 lines

  1. /* Miscellaneous machine independent utilities */
  2. #include <stdio.h>
  3. #include <ctype.h>
  4. #include "global.h"
  5. #include "socket.h"
  6. #include "mbuf.h"
  7. #include "files.h"
  8. #include "netuser.h"
  9. #include "cmdparse.h"
  10. #include "smtp.h"            /* used for 'months' */
  11.  
  12. /* Convert hex-ascii to integer */
  13. int
  14. htoi(char *s)
  15. {
  16.     int i = 0;
  17.     char c;
  18.  
  19.     while((c = *s++) != '\0'){
  20.         if(c == 'x')
  21.             continue;    /* allow 0x notation */
  22.         if('0' <= c && c <= '9')
  23.             i = (i * 16) + (c - '0');
  24.         else if('a' <= c && c <= 'f')
  25.             i = (i * 16) + (c - 'a' + 10);
  26.         else if('A' <= c && c <= 'F')
  27.             i = (i * 16) + (c - 'A' + 10);
  28.         else
  29.             break;
  30.     }
  31.     return i;
  32. }
  33.  
  34. /* replace terminating end of line marker with null */
  35. void
  36. rip(char *s)
  37. {
  38.     char *cp;
  39.  
  40.     if((cp = strpbrk(s,"\r\n")) != NULLCHAR)
  41.         *cp = '\0';
  42. }
  43.  
  44. char *
  45. timestr(int32 gmt)
  46. {
  47.     static char buf[20];
  48.     struct tm *tm = gmtime(&gmt);
  49.  
  50.     sprintf(buf,"%02d%s%02d/%02d%02dz",
  51.         tm->tm_mday,
  52.         Months[tm->tm_mon],
  53.         tm->tm_year,
  54.         tm->tm_hour,
  55.         tm->tm_min);
  56.  
  57.     return buf;
  58. }
  59.  
  60. void
  61. gethelp(int16 port,int s,char *topic)
  62. {
  63.   FILE *fp;
  64.   char line[MAXPATH + 2];
  65.   static char nohelp[] = "No help available for '%s'\n";
  66.  
  67.   sprintf(line,"%s/%s.hlp",EtcRoot,tcp_port(port));
  68.  
  69.   if((fp = Fopen(line,READ_TEXT,0,0)) == NULLFILE) {
  70.     usprintf(s,nohelp,topic);
  71.     return;
  72.   }
  73.   if(stricmp(topic,"all") == 0) {
  74.     while(fgets(line,MAXPATH,fp) != NULL) {
  75.       if(*line != '^') {
  76.         usputs(s,line);
  77.       }
  78.     }
  79.   } else if(stricmp(topic,"topic") == 0) {
  80.     int i = 0;
  81.     while(fgets(line,MAXPATH,fp) != NULL) {
  82.       if(*line == '^') {
  83.         rip(line);
  84.         usprintf(s,(i++ % 5) < 4 ? "%-15.14s" : "%s\n",line + 1);
  85.       }
  86.     }
  87.     if(i % 5) {
  88.       usputs(s,"\n");
  89.     }
  90.   } else {
  91.     char *p;
  92.     int state = 0;
  93.  
  94.     while(fgets(line,MAXPATH,fp) != NULL) {
  95.  
  96.       for(p = line; *p; p++) ;
  97.       while(--p >= line && isspace(uchar(*p))) ;
  98.       p[1] = 0;
  99.  
  100.       if(state == 0 && *line == '^' && stricmp(line + 1,topic) == 0) {
  101.         state = 1;
  102.       }
  103.       if(state == 1 && *line != '^') {
  104.         state = 2;
  105.       }
  106.       if(state == 2) {
  107.         if(*line == '^') {
  108.           break;
  109.         }
  110.         usprintf(s,"%s\n",line);
  111.       }
  112.     }
  113.     if(state < 2)
  114.       usprintf(s,nohelp,topic);
  115.   }
  116.   Fclose(fp);
  117. }
  118.  
  119. #ifdef XXX
  120.  
  121. ... in pcgen.asm ...
  122.  
  123. /* Host-network conversion routines, replaced on the 8086 with assembler */
  124.  
  125. /* Put a long in host order into a char array in network order */
  126. char *
  127. put32(char *cp,int32 x)
  128. {
  129.     *cp++ = x >> 24;
  130.     *cp++ = x >> 16;
  131.     *cp++ = x >> 8;
  132.     *cp++ = x;
  133.     return cp;
  134. }
  135.  
  136. /* Put a short in host order into a char array in network order */
  137. char *
  138. put16(char *cp,int16 x)
  139. {
  140.     *cp++ = x >> 8;
  141.     *cp++ = x;
  142.  
  143.     return cp;
  144. }
  145.  
  146. int16
  147. get16(char *cp)
  148. {
  149.     int16 x = uchar(*cp++);
  150.  
  151.     x <<= 8;
  152.     x |= uchar(*cp);
  153.  
  154.     return x;
  155. }
  156.  
  157. /* Machine-independent, alignment insensitive network-to-host long conversion */
  158. int32
  159. get32(char *cp)
  160. {
  161.     int32 rval = uchar(*cp++);
  162.  
  163.     rval <<= 8;
  164.     rval |= uchar(*cp++);
  165.     rval <<= 8;
  166.     rval |= uchar(*cp++);
  167.     rval <<= 8;
  168.     rval |= uchar(*cp);
  169.  
  170.     return rval;
  171. }
  172.  
  173. /* Compute int(log2(x)) */
  174. int
  175. log2(int16 x)
  176. {
  177.     int n = 16;
  178.  
  179.     for(;n != 0;n--){
  180.         if(x & 0x8000)
  181.             break;
  182.         x <<= 1;
  183.     }
  184.     n--;
  185.     return n;
  186. }
  187.  
  188. #endif
  189.  
  190.